package jspSamples.unit7.websiteSample;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

public class News {

    DBConnection DBConn  = new DBConnection();
    Function Fun = new Function();

    // 实现新闻列表查

    public String ListNews(String toPage, String pageNum) {
        try {
            // 获取数据库连接
            Connection Conn = DBConn.getConn();
            Statement stmt = Conn.createStatement();
            ResultSet rs = null;
            StringBuffer resultData = new StringBuffer(); // 创建结果字符串集合

            // 查询语句
            String sSql = "SELECT * FROM News ORDER BY NewsID DESC";

            // 执行数据库查询
            rs = stmt.executeQuery(sSql);

            // 获取分页结果并添加到结果集合
            resultData = Fun.ListNews(resultData, rs, toPage, pageNum);

            // 关闭结果集和数据库连接
            rs.close();
            stmt.close();
            Conn.close();

            // 返回结果
            return resultData.toString();
        } catch (Exception e) {
            e.printStackTrace();  // 打印异常信息
            return "No";  // 如果发生异常，返回"No"
        }
    }


    /**
     * 新增新闻记录
     */
    public String AddNews(String[] newsData) {
        try {
            // 获取数据库连接
            Connection Conn = DBConn.getConn();
            Statement stmt = Conn.createStatement(); // 创建数据库连接状态
            ResultSet rs = null; // 创建结果集查询

            // 查询新闻表，按 NewsID 排序
            String sSql = "SELECT * FROM News ORDER BY NewsID DESC";

            // 执行数据库查询
            rs = stmt.executeQuery(sSql);

            // 调用 Fun.AddNews 方法来执行插入操作
            String result = Fun.AddNews(Conn, stmt, rs, newsData);

            // 返回操作结果
            return result;

        } catch (Exception e) {
            e.printStackTrace();  // 打印异常信息
            return "添加失败";  // 如果发生异常，返回"添加失败"
        }
    }

    public boolean DelNews(String newsId) {
        try {
            // 获取数据库连接
            Connection Conn = DBConn.getConn();
            Statement stmt = Conn.createStatement();

            // 将字符串newsId转化为数字类型
            int NewsID = Fun.strToInt(newsId);

            // 调用 Fun.DelNews 方法执行删除操作
            return Fun.DelNews(Conn, stmt, NewsID);
        } catch (Exception e) {
            e.printStackTrace();  // 打印异常信息
            return false;  // 如果发生异常，返回 false
        }
    }

    public String EditNews(String[] newsData, String newsId) {
        try {
            // 获取数据库连接
            Connection Conn = DBConn.getConn();
            Statement stmt = Conn.createStatement();  // 创建数据库连接状态

            // 调用 Fun.EditNews 方法执行修改操作，并返回状态
            return Fun.EditNews(Conn, stmt, newsData, newsId);
        } catch (Exception e) {
            e.printStackTrace();  // 打印异常信息
            return "数据库连接失败!";  // 如果发生异常，返回错误提示
        }
    }


    public String ListNewsFront(String toPage, String pageNum) {
        try {
            // 获取数据库连接
            Connection Conn = DBConn.getConn();
            Statement stmt = Conn.createStatement();  // 创建数据库连接状态
            ResultSet rs = null;  // 定义查询结果集
            StringBuffer resultData = new StringBuffer();  // 创建结果字符串集合

            // 查询新闻数据
            String sSql = "select * from News order by NewsID desc";
            rs = stmt.executeQuery(sSql);  // 执行查询

            // 获取分页结果
            resultData = Fun.ListNewsFront(resultData, rs, toPage, pageNum);

            // 关闭连接和资源
            rs.close();
            stmt.close();
            Conn.close();

            return resultData.toString();  // 返回查询结果

        } catch (Exception e) {
            e.printStackTrace();  // 打印异常信息
            return "No";  // 如果发生异常，返回"查询失败"
        }
    }


    public String FrontNewsDetail(String id) {
        try {
            // 获取数据库连接
            Connection Conn = DBConn.getConn();
            Statement stmt = Conn.createStatement();
            ResultSet rs = null;

            // 将传入的字符串 id 转换为整数类型
            int NewsID = Fun.strToInt(id);

            // 如果 NewsID 为 0，返回 "No"
            if (NewsID == 0) {
                return "No";
            } else {
                try {
                    // 查询新闻详细信息
                    String sql = "select * from News where NewsID = " + NewsID;
                    rs = stmt.executeQuery(sql);

                    // 构建新闻详情的字符串内容
                    StringBuffer sb = new StringBuffer();
                    sb = Fun.FrontNewsDetail(sb, rs);

                    // 关闭连接
                    rs.close();
                    stmt.close();
                    Conn.close();

                    // 返回新闻详情
                    return sb.toString();
                } catch (Exception e) {
                    // 如果查询发生异常，回滚并关闭连接
                    Conn.rollback();
                    Conn.close();
                    return "No";
                }
            }
        } catch (Exception e) {
            // 如果发生任何异常，返回 "No"
            return "No";
        }
    }





}
